package com.wxm.common.file.core.config;

import com.alibaba.fastjson.JSONObject;
import com.wxm.common.file.core.result.DeleteFileResult;
import com.wxm.common.file.core.result.UploadFileResult;
import com.wxm.common.file.core.property.UploadBaseProperty;
import com.wxm.common.file.core.result.UploadMd5Result;

import java.util.function.Consumer;
import java.util.function.Function;

/**
 * <p>
 *      获取上传配置Service
 * </p>
 *
 * @author: wxm
 * @Date: 2022/1/20
 */
public interface UploadConfigService {
    /**
     * 获取文件上传配置
     * @param uploadParam 自定义参数
     * @return UploadConfigVo
     */
    UploadConfigVo getUploadConfigVo(JSONObject uploadParam);

    /**
     * 上传后的操作
     * <li>可以将此次上传记录存入数据库</li>
     * @param uploadParam 自定义参数
     * @return Consumer<UploadFileResult>
     */
    Consumer<UploadFileResult> uploadAfter(JSONObject uploadParam);

    /**
     * 删除后的操作
     * <li>可以对数据库插入的上传记录进行删除</li>
     * @return Function<JSONObject,Object>
     */
    Function<JSONObject,Object> deleteAfter();

    /**
     * 是否对文件MD5校验 开启MD5校验就会执行 {@link #}
     * @return boolean
     */
    boolean checkFileMd5();

    /**
     * 对文件MD5获取 如果获取出来可返回原有的URL 后面就不会在进行上传
     * @param nowFileMd5 当前上传文件的MD5加密
     * @param uploadParam 自定义参数
     * @return UploadMd5Result
     */
    UploadMd5Result doCheckFileMd5(String nowFileMd5, JSONObject uploadParam);

    /**
     * 文件MD5Eq匹配上后的操作
     * <li>更新上传记录的时间->方便让图片排序靠前等</li>
     * @return Consumer<UploadMd5Result>
     */
    Consumer<UploadMd5Result> md5EqAfter();
}
